import { mount } from '@vue/test-utils'
import { createTestingPinia } from '@pinia/testing'

/**
 * 创建测试组件的通用函数
 * @param {Object} component - Vue 组件
 * @param {Object} options - 额外的选项，包括 props, slots, global 等
 * @returns {import('@vue/test-utils').VueWrapper} 测试包装器
 */
export function createTestWrapper(component, options = {}) {
  return mount(component, {
    global: {
      plugins: [createTestingPinia()],
      ...options.global
    },
    props: {
      ...options.props
    },
    slots: {
      ...options.slots
    }
  })
}

/**
 * 等待 DOM 更新的工具函数
 */
export async function waitForUpdate() {
  return new Promise(resolve => setTimeout(resolve, 0))
}

/**
 * 创建模拟事件对象
 * @param {Object} overrides - 要覆盖的事件属性
 * @returns {Object} 模拟的事件对象
 */
export function createMockEvent(overrides = {}) {
  return {
    preventDefault: vi.fn(),
    stopPropagation: vi.fn(),
    clientX: 0,
    clientY: 0,
    ...overrides
  }
}